package controllers

import (
	"Blog/models"
	"errors"
	beego "github.com/beego/beego/v2/server/web"
	"github.com/satori/go.uuid"
)

type BaseController struct{
	User models.User
	beego.Controller
	IsLogin bool
}

type NestPrepare interface {
	NestPrepare()
}

type H map[string]interface{}
const SESSION_USER_KEY="SESSION_USER_KEY"  //定义session的值

func (c *BaseController) Prepare(){
	c.Data["path"]=c.Ctx.Request.RequestURI   //获取网页的路径
	u,ok:=c.GetSession(SESSION_USER_KEY).(models.User)   //判断获取的session是不是User类型
	c.IsLogin=false   //设置值
	if ok{
		c.User=u
		c.IsLogin=true
		c.Data["User"]=c.User
	}
	c.Data["IsLogin"]=c.IsLogin
	if a,ok:=c.AppController.(NestPrepare);ok{
           a.NestPrepare()
	}    //判断结构体是否实现了NestPrepare这个接口，如果实现了，就调用这个方法的函数
}
//让所有的程序都可以调用该方法来返回错误
func (c *BaseController) Abort500(err error){
	c.Data["error"]=err
	c.Abort("500")    //调用Error500的方法
}
//判断获取到的值是否为空
func (c *BaseController) JugeNull(val string,msg string)(str string){
	str=c.GetString(val)
   if len(str)==0{
     c.Abort500(errors.New(msg))
   }
   return str
}
func (c *BaseController) MustLogin(){
	if !c.IsLogin{
		c.Abort500(errors.New("用户没有登录"))
	}
}
func (c *BaseController) UUID()string{
	u:=uuid.NewV4() //随机生成uuid
                return u.String()
}